"The SNES9x savestate file format" v0.1
                            ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
                                        by creaothceann



1. Content
ŻŻŻŻŻŻŻŻŻŻ
1. Content
2. Disclaimer
3. Revisions
4. Conventions
5. Savestates
6. File blocks
7. Unstructured file blocks
8.   Structured file blocks
9. Variables



2. Disclaimer
ŻŻŻŻŻŻŻŻŻŻŻŻŻ
The information herein is provided as-is for anything you want. I tried to make it as accurate
as possible, but that might not mean much. And specifications can change at any time, too.

Nevertheless this document should be helpful, unless the savestate file format was _completely_
revamped since the last revision.



3. Revisions
ŻŻŻŻŻŻŻŻŻŻŻŻ
2007-10-09:  initial version 0.1	no sub-structure details yet



4. Conventions
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
I'll be using the following data types:

	Byte			=	unsigned  8-bit integer: $00..$00000000000000FF
	Word			=	unsigned 16-bit integer: $00..$000000000000FFFF
	DWord			=	unsigned 32-bit integer: $00..$00000000FFFFFFFF
	QWord			=	unsigned 64-bit integer: $00..$FFFFFFFFFFFFFFFF
	Int64			=	  signed 64-bit integer: -(2^63)..(2^63 - 1)
	Boolean			=	8-bit type: 'False' (no bit set), 'True' (any bit set)
	Char			=	8-bit type: ANSI/ASCII character

"Array[x] of y" simply means: "x variables of type y without any padding bytes between them".
The structures listed here also have no empty space between their variables.



5. Savestates
ŻŻŻŻŻŻŻŻŻŻŻŻŻ

SNES9x savestates (also called "freeze files" or "snapshots") have the filename extension
'.00x', with 'x' being a decimal digit ('0'..'9'). The files are usually compressed with GZIP;
they can be decompressed with tools like WinRAR. The GZIP library (and hence SNES9x) can also
handle uncompressed files.

At the beginning of the file there's a file header:

	Signature		:	Array[8] of Char
	Colon			:	Char
	Version			:	Array[4] of Char
	LineFeed		:	Char

"Signature" must be the string '#!snes9x', "Colon" must be ':', and "LineFeed" should be the
ASCII character #10. "Version" should be the decimal number string '0001'; otherwise the file
format itself would be a newer one.

The rest of the savestate is structured into file blocks of variable size.



6. File blocks
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
In an uncompressed file they look like this:

	Name			:	Array[3] of Char
	Separator1		:	Char
	Size			:	Array[6] of Char
	Separator2		:	Char
	Data			:	Array[Size] of Byte

"Name" identifies the file block type. "Separator1" and "Separator2" contain the ASCII character
#58 (colon ':'). "Size" is a decimal number string describing the number of bytes in the "Data"
part.

The standard file block order is like this:

	block 01:  NAM
	block 02:  CPU
	block 03:  REG
	block 04:  PPU
	block 05:  DMA
	block 06:  VRA
	block 07:  RAM
	block 08:  SRA
	block 09:  FIL
	block 10:  APU  (if emulating the APU)
	block 11:  ARE  (if emulating the APU)
	block 12:  ARA  (if emulating the APU)
	block 13:  SOU  (if emulating the APU)
	block 14:  SA1  (if emulating the SA-1)
	block 15:  SAR  (if emulating the SA-1)
	block 16:  SP7  (if emulating the SPC7110)
	block 17:  RTC  (if emulating the SPC7110 RTC)

File readers should accept the blocks in any order though, even several blocks of the same type.



================================================================================================



7. Unstructured file blocks
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
The following block types are simple byte or char arrays:

	7.1  ARA	(APU RAM)
	7.2  FIL	(FillRAM)
	7.3  NAM	(cartridge name)
	7.4  RAM	(WRAM data)
	7.5  SRA	(SRAM data)
	7.6  VRA	(VRAM data)

Unstructured file blocks are just streamed to disk.



7.1 ARA		=	Array[65536] of Byte
ŻŻŻŻŻŻŻ
The "audio processing unit" (APU) RAM, which stores BRR-encoded samples and the program to play
them.

Note that read accesses to $FFC0..$FFFF can return either RAM as normal, or they can access the
content of the 64-byte "IPL ROM" that is responsible for data communications after a reset.
SNES9x handles that by defining a variable called "ExtraRAM" (see the APU file block), which is
used when RAM is selected.



7.2 FIL		=	Array[$0000..$7FFF] of Byte
ŻŻŻŻŻŻŻ
In the SNES9x code, "FillRAM" is a pointer to 32 KB of scratch memory. Whenever the 65c816 does
a write access to addresses $xx:0000..$xx:7FFF, the value is also written into this array. With
"FillRAM" the developers can access registers by address rather than by name.



7.3 NAM		=	Array[?] of Char
ŻŻŻŻŻŻŻ
A null-terminated string storing the filename of the cartridge ROM, as returned by the OS. The
block size is the length of the string plus the terminating byte (ASCII #0).

The string should not be treated as readable since there's no encoding. It's just used to detect
if the previously loaded ROM matches the currently loaded one.



7.4 RAM		=	Array[65536 * 2] of Byte
ŻŻŻŻŻŻŻ
The "work RAM" (WRAM) data, usually accessed via banks $7E and $7F.



7.5 SRA		=	Array[65536] of Byte
ŻŻŻŻŻŻŻ
The "Save RAM" (SRAM) data, used by cartridges.

SNES9x loads/saves only that much from/to savestates, but otherwise uses 128 KB in the rest of
the program. Maybe just an oversight, or the data for cartridges with larger SRAM chips is
stored elsewhere?



7.6 VRA		=	Array[65536] of Byte
ŻŻŻŻŻŻŻ
The "video RAM" (VRAM) data, which the SNES stores in two RAM chips.

In this savestate block the even-numbered bytes (0, 2, 4, ...) are from the first memory chip;
the odd-numbered bytes are from the second one. This is also how most other emulators, e.g.
ZSNES, do it. (The exception is Super Sleuth, which stores the content of the two chips in two
separate arrays.)



================================================================================================



8. Structured file blocks
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
The following block types contain variables, like a Pascal "record" or a C/C++ "struct":

	8.01  APU	(APU status)
	8.02  ARE	(APU registers)
	8.03  CPU	(CPU status)
	8.04  DMA	(DMA/HDMA channels)
	8.05  PPU	(PPU status)
	8.06  REG	(CPU registers)
	8.07  RTC	(SPC7110 RTC status)
	8.08  SA1	(SA-1 status)
	8.09  SAR	(SA-1 registers)
	8.10  SP7	(SPC7110 status)
	8.11  SOU	(sound data)

Variables consisting of multiple bytes must be stored in big-endian format. (Just for the
record, the x86/Windows platform is little-endian.)



8.1 APU
ŻŻŻŻŻŻŻ
The status of the audio processing unit.

	Cycles			:	DWord
	ShowROM			:	Boolean
	Flags			:	Byte
	KeyedChannels		:	Byte
	OutPorts		:	Array[  4] of Byte
	DSP			:	Array[128] of Byte
	ExtraRAM		:	Array[ 64] of Byte
	Timer			:	Array[  3] of Word
	TimerTarget		:	Array[  3] of Word
	TimerEnabled		:	Array[  3] of Boolean
	TimerValueWritten	:	Array[  3] of Boolean

Multi-byte variables must be stored in big-endian format.



8.2 ARE
ŻŻŻŻŻŻŻ
The "APU registers", i.e. the registers of the Sony "SPC700" audio processor.

	P			:	Byte
	YA			:	Word
	X			:	Byte
	S			:	Byte
	PC			:	Word

Multi-byte variables must be stored in big-endian format.



8.3 CPU
ŻŻŻŻŻŻŻ
The status of the main processor "Ricoh 5A22", which is based on WDC/GTE's "65c816" core.

	Flags			:	DWord
	BranchSkip		:	Boolean
	NMIActive		:	Boolean
	IRQActive		:	Boolean
	WaitingForInterrupt	:	Boolean
	WhichEvent		:	Byte
	Cycles			:	DWord
	NextEvent		:	DWord
	V_Counter		:	DWord
	MemSpeed		:	DWord
	MemSpeedx2		:	DWord
	FastROMSpeed		:	DWord

Multi-byte variables must be stored in big-endian format.



8.4 DMA
ŻŻŻŻŻŻŻ
The "DMA" file block consists of 8 sub-structures, one for each DMA/HDMA channel. They look like
this:

	TransferDirection	:	Boolean
	AAddressFixed		:	Boolean
	AAddressDecrement	:	Boolean
	TransferMode		:	Byte
	ABank			:	Byte
	AAddress		:	Word
	Address			:	Word
	BAddress		:	Byte
	TransferBytes		:	Word
	HDMAIndirectAddressing	:	Boolean
	IndirectAddress		:	Word
	IndirectBank		:	Byte
	Repeat			:	Byte
	LineCount		:	Byte
	FirstLine		:	Byte

Multi-byte variables must be stored in big-endian format.



8.5 PPU
ŻŻŻŻŻŻŻ
The status of the two PPU (picture-processing unit) chips, and some joypad and mouse data.

	BGMode			:	Byte
	BG3Priority		:	Boolean
	Brightness		:	Byte
	VMA			:	1 "VMA" structure
	BG			:	4 "BG"  structures
	CGFLIP			:	Boolean
	CGDATA			:	Array[256] of Word
	FirstSprite		:	Byte
	OBJ			:	128 "OBJ" structures
	OAMPriorityRotation	:	Boolean
	OAMAddr			:	Word
	OAMFlip			:	Boolean
	OAMTileAddress		:	Word
	IRQVBeamPos		:	Word
	IRQHBeamPos		:	Word
	VBeamPosLatched		:	Word
	HBeamPosLatched		:	Word
	HBeamFlip		:	Byte
	VBeamFlip		:	Byte
	HVBeamCounterLatched	:	Boolean
	MatrixA			:	Word
	MatrixB			:	Word
	MatrixC			:	Word
	MatrixD			:	Word
	CentreX			:	Word
	CentreY			:	Word
	Joypad1ButtonReadPos	:	Byte
	Joypad2ButtonReadPos	:	Byte
	Joypad3ButtonReadPos	:	Byte
	CGADD			:	Byte
	FixedColourRed		:	Byte
	FixedColourGreen	:	Byte
	FixedColourBlue		:	Byte
	SavedOAMAddr		:	Word
	ScreenHeight		:	Word
	WRAM			:	DWord
	ForcedBlanking		:	Boolean
	OBJNameSelect		:	Word
	OBJSizeSelect		:	Byte
	OBJNameBase		:	Word
	OAMReadFlip		:	Boolean
	VTimerEnabled		:	Boolean
	HTimerEnabled		:	Boolean
	HTimerPosition		:	Word
	Mosaic			:	Byte
	Mode7HFlip		:	Boolean
	Mode7VFlip		:	Boolean
	Mode7Repeat		:	Boolean
	Window1Left		:	Byte
	Window1Right		:	Byte
	Window2Left		:	Byte
	Window2Right		:	Byte
	ClipWindowOverlapLogic	:	Array[6] of Byte
	ClipWindow1Enable	:	Array[6] of Boolean
	ClipWindow2Enable	:	Array[6] of Boolean
	ClipWindow1Inside	:	Array[6] of Boolean
	ClipWindow2Inside	:	Array[6] of Boolean
	CGFLIPRead		:	Boolean
	Need16x8Mulitply	:	Boolean
	BGMosaic		:	Array[4] of Boolean
	OAMData			:	Array[544] of Byte
	Need16x8Mulitply_2	:	Boolean
	MouseSpeed		:	Array[2] of Byte

Multi-byte variables must be stored in big-endian format.



8.6 REG
ŻŻŻŻŻŻŻ
The registers of the 65c816.

	PB			:	Byte
	DB			:	Byte
	P			:	Word
	A			:	Word
	D			:	Word
	S			:	Word
	X			:	Word
	Y			:	Word
	PC			:	Word

Multi-byte variables must be stored in big-endian format.



8.7 RTC
ŻŻŻŻŻŻŻ
The status of the SPC7110's real-time clock.

	reg			:	Array[16] of Byte
	index			:	Word
	control			:	Byte
	init			:	Boolean
	last_used		:	DWord

Multi-byte variables must be stored in big-endian format.



8.8 SA1
ŻŻŻŻŻŻŻ
The status of the SA-1, which is another "65c816" clocked at 10 MHz.

	Flags			:	DWord
	NMIActive		:	Boolean
	IRQActive		:	Boolean
	WaitingForInterrupt	:	Boolean
	op1			:	Word
	op2			:	Word
	arithmetic_op		:	DWord
	sum			:	Int64
	overflow		:	Boolean

Multi-byte variables must be stored in big-endian format.



8.9 SAR
ŻŻŻŻŻŻŻ
The SA-1 processor registers.

	PB			:	Byte
	DB			:	Byte
	P			:	Word
	A			:	Word
	D			:	Word
	S			:	Word
	X			:	Word
	Y			:	Word
	PC			:	Word

Multi-byte variables must be stored in big-endian format.



8.10 SP7
ŻŻŻŻŻŻŻŻ
The status of the "SPC7110", which is a data decompression chip.

	reg4800			:	Byte
	reg4801			:	Byte
	reg4802			:	Byte
	reg4803			:	Byte
	reg4804			:	Byte
	reg4805			:	Byte
	reg4806			:	Byte
	reg4807			:	Byte
	reg4808			:	Byte
	reg4809			:	Byte
	reg480A			:	Byte
	reg480B			:	Byte
	reg480C			:	Byte
	reg4811			:	Byte
	reg4812			:	Byte
	reg4813			:	Byte
	reg4814			:	Byte
	reg4815			:	Byte
	reg4816			:	Byte
	reg4817			:	Byte
	reg4818			:	Byte
	reg4820			:	Byte
	reg4821			:	Byte
	reg4822			:	Byte
	reg4823			:	Byte
	reg4824			:	Byte
	reg4825			:	Byte
	reg4826			:	Byte
	reg4827			:	Byte
	reg4828			:	Byte
	reg4829			:	Byte
	reg482A			:	Byte
	reg482B			:	Byte
	reg482C			:	Byte
	reg482D			:	Byte
	reg482E			:	Byte
	reg482F			:	Byte
	reg4830			:	Byte
	reg4831			:	Byte
	reg4832			:	Byte
	reg4833			:	Byte
	reg4834			:	Byte
	reg4840			:	Byte
	reg4841			:	Byte
	reg4842			:	Byte
	AlignBy			:	Byte
	written			:	Byte
	offset_add		:	Byte
	DataRomOffset		:	DWord
	DataRomSize		:	DWord
	bank50Internal		:	DWord
	bank50			:	Array[65536] of Byte

Multi-byte variables must be stored in big-endian format.



8.11 SOU
ŻŻŻŻŻŻŻŻ
The status of the APU's DSP. On the SNES, these settings are accessed by the SPC700 by writing
to address $00F2 (selects a DSP address) and reading/writing $00F3 (reads/writes a DSP register
value).

	master_volume_left	:	Word
	master_volume_right	:	Word
	echo_volume_left	:	Word
	echo_volume_right	:	Word
	echo_enable		:	DWord
	echo_feedback		:	DWord
	echo_ptr		:	DWord
	echo_buffer_size	:	DWord
	echo_write_enabled	:	DWord
	echo_channel_enable	:	DWord
	pitch_mod		:	DWord
	dummy			:	Array[3] of DWord
	channel			:	8 "SoundChn" structures

Multi-byte variables must be stored in big-endian format.



================================================================================================



9. Variables
ŻŻŻŻŻŻŻŻŻŻŻŻ

9.1 [APU] Cycles
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ




9.1 [APU] ShowROM
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ




9.1 [APU] Flags
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ




9.1 [APU] KeyedChannels
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ




9.1 [APU] OutPorts
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ




9.1 [APU] DSP
ŻŻŻŻŻŻŻŻŻŻŻŻŻ




9.1 [APU] ExtraRAM
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ




9.1 [APU] Timer
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ




9.1 [APU] TimerTarget
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ




9.1 [APU] TimerEnabled
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ




9.1 [APU] TimerValueWritten
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ




9.2 [ARE] P
ŻŻŻŻŻŻŻŻŻŻŻ




9.2 [ARE] YA
ŻŻŻŻŻŻŻŻŻŻŻŻ




9.2 [ARE] X
ŻŻŻŻŻŻŻŻŻŻŻ




9.2 [ARE] S
ŻŻŻŻŻŻŻŻŻŻŻ




9.2 [ARE] PC
ŻŻŻŻŻŻŻŻŻŻŻŻ




9.3 [CPU] Flags
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.3 [CPU] BranchSkip
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.3 [CPU] NMIActive
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.3 [CPU] IRQActive
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.3 [CPU] WaitingForInterrupt
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.3 [CPU] WhichEvent
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.3 [CPU] Cycles
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.3 [CPU] NextEvent
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.3 [CPU] V_Counter
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.3 [CPU] MemSpeed
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.3 [CPU] MemSpeedx2
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.3 [CPU] FastROMSpeed
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ




9.4 [DMA] TransferDirection
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.4 [DMA] AAddressFixed
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.4 [DMA] AAddressDecrement
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.4 [DMA] TransferMode
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.4 [DMA] ABank
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.4 [DMA] AAddress
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.4 [DMA] Address
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.4 [DMA] BAddress
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.4 [DMA] TransferBytes
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.4 [DMA] HDMAIndirectAddressing
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.4 [DMA] IndirectAddress
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.4 [DMA] IndirectBank
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.4 [DMA] Repeat
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.4 [DMA] LineCount
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.4 [DMA] FirstLine
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ




9.5 [PPU] BGMode
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] BG3Priority
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] Brightness
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] VMA
ŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] BG
ŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] CGFLIP
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] CGDATA
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] FirstSprite
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] OBJ
ŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] OAMPriorityRotation
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] OAMAddr
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] OAMFlip
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] OAMTileAddress
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] IRQVBeamPos
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] IRQHBeamPos
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] VBeamPosLatched
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] HBeamPosLatched
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] HBeamFlip
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] VBeamFlip
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] HVBeamCounterLatched
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] MatrixA
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] MatrixB
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] MatrixC
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] MatrixD
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] CentreX
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] CentreY
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] Joypad1ButtonReadPos
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] Joypad2ButtonReadPos
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] Joypad3ButtonReadPos
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] CGADD
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] FixedColourRed
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] FixedColourGreen
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] FixedColourBlue
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] SavedOAMAddr
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] ScreenHeight
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] WRAM
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] ForcedBlanking
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] OBJNameSelect
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] OBJSizeSelect
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] OBJNameBase
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] OAMReadFlip
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] VTimerEnabled
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] HTimerEnabled
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] HTimerPosition
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] Mosaic
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] Mode7HFlip
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] Mode7VFlip
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] Mode7Repeat
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] Window1Left
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] Window1Right
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] Window2Left
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] Window2Right
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] ClipWindowOverlapLogic
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] ClipWindow1Enable
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] ClipWindow2Enable
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] ClipWindow1Inside
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] ClipWindow2Inside
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] CGFLIPRead
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] Need16x8Mulitply
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] BGMosaic
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] OAMData
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] Need16x8Mulitply_2
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.5 [PPU] MouseSpeed
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ




9.6 [REG] PB
ŻŻŻŻŻŻŻŻŻŻŻŻ



9.6 [REG] DB
ŻŻŻŻŻŻŻŻŻŻŻŻ



9.6 [REG] P
ŻŻŻŻŻŻŻŻŻŻŻ



9.6 [REG] A
ŻŻŻŻŻŻŻŻŻŻŻ



9.6 [REG] D
ŻŻŻŻŻŻŻŻŻŻŻ



9.6 [REG] S
ŻŻŻŻŻŻŻŻŻŻŻ



9.6 [REG] X
ŻŻŻŻŻŻŻŻŻŻŻ



9.6 [REG] Y
ŻŻŻŻŻŻŻŻŻŻŻ



9.6 [REG] PC
ŻŻŻŻŻŻŻŻŻŻŻŻ



9.7 [RTC] reg
ŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.7 [RTC] index
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.7 [RTC] control
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.7 [RTC] init
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.7 [RTC] last_used
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.8 [SA1] Flags
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.8 [SA1] NMIActive
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.8 [SA1] IRQActive
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.8 [SA1] WaitingForInterrupt
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.8 [SA1] op1
ŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.8 [SA1] op2
ŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.8 [SA1] arithmetic_op
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.8 [SA1] sum
ŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.8 [SA1] overflow
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.9 [SAR] PB
ŻŻŻŻŻŻŻŻŻŻŻŻ



9.9 [SAR] DB
ŻŻŻŻŻŻŻŻŻŻŻŻ



9.9 [SAR] P
ŻŻŻŻŻŻŻŻŻŻŻ



9.9 [SAR] A
ŻŻŻŻŻŻŻŻŻŻŻ



9.9 [SAR] D
ŻŻŻŻŻŻŻŻŻŻŻ



9.9 [SAR] S
ŻŻŻŻŻŻŻŻŻŻŻ



9.9 [SAR] X
ŻŻŻŻŻŻŻŻŻŻŻ



9.9 [SAR] Y
ŻŻŻŻŻŻŻŻŻŻŻ



9.9 [SAR] PC
ŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4800
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4801
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4802
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4803
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4804
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4805
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4806
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4807
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4808
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4809
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg480A
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg480B
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg480C
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4811
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4812
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4813
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4814
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4815
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4816
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4817
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4818
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4820
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4821
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4822
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4823
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4824
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4825
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4826
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4827
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4828
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4829
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg482A
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg482B
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg482C
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg482D
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg482E
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg482F
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4830
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4831
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4832
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4833
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4834
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4840
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4841
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] reg4842
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] AlignBy
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] written
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] offset_add
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] DataRomOffset
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] DataRomSize
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] bank50Internal
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.10 [SP7] bank50
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.11 [SOU] master_volume_left
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.11 [SOU] master_volume_right
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.11 [SOU] echo_volume_left
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.11 [SOU] echo_volume_right
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.11 [SOU] echo_enable
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.11 [SOU] echo_feedback
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.11 [SOU] echo_ptr
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.11 [SOU] echo_buffer_size
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.11 [SOU] echo_write_enabled
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.11 [SOU] echo_channel_enable
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.11 [SOU] pitch_mod
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.11 [SOU] dummy
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ



9.11 [SOU] channel
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ

















































0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF